home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 12 - 1996 / 12.02 Feb 96 / Adding Scripts to Menus / Scripts MenuCode / SCFinderUtility.cp next >
Encoding:
Text File  |  1995-06-15  |  2.4 KB  |  88 lines  |  [TEXT/MMCC]

  1. // ===========================================================================
  2. // SCFinderUtility.cp
  3. // ===========================================================================
  4. // © 1995 James Kaput, Jeremy Roschelle SimCalc Project
  5.  
  6. #include "SCFinderUtility.h"
  7.  
  8. void    
  9. UFinder::GetAppSpec(FSSpec &inSpec)
  10. {
  11.     ProcessSerialNumber    psn;
  12.     ProcessInfoRec        info;
  13.     info.processAppSpec = &inSpec;
  14.     info.processInfoLength = sizeof(info);
  15.     info.processName = nil;
  16.     ::GetCurrentProcess(&psn);
  17.     ::GetProcessInformation(&psn,&info);  
  18. }
  19.  
  20. long 
  21. UFinder::GetFolderID(FSSpec &inParentFolder, Str255 inName)
  22. {    
  23.     CInfoPBRec    pb;        // 108-byte area
  24.     DirInfo    *dpb = (DirInfo *)&pb;
  25.     OSErr     err;
  26.  
  27.     dpb->ioNamePtr = inName ;
  28.     dpb->ioVRefNum = inParentFolder.vRefNum;
  29.     dpb->ioDrDirID = inParentFolder.parID;
  30.     dpb->ioFDirIndex = 0;
  31.     err = PBGetCatInfo(&pb,false);
  32.     if (err == noErr && dpb->ioFlAttrib & ( 1 <<  4)) // make sure its a folder
  33.         return dpb->ioDrDirID;
  34.     else return 0;
  35. }
  36.  
  37. OSErr
  38. UFinder::SendFinderAEOpen(FSSpec &inFile)
  39. {
  40.     OSErr        err = noErr;
  41.     AEDesc        processDesc;
  42.     AppleEvent        ae, aeReply;
  43.     ae.descriptorType = aeReply.descriptorType = processDesc.descriptorType = typeNull;
  44.     ae.dataHandle = aeReply.dataHandle = processDesc.dataHandle = nil;
  45.     
  46.     Try_ {
  47.         DescType    finderType = 'MACS';
  48.         err = ::AECreateDesc(typeApplSignature,&finderType,sizeof(DescType),&processDesc);
  49.         FailOSErr_(err);
  50.         
  51.         err    = ::AECreateAppleEvent(kCoreEventClass, kAEOpen,&processDesc,
  52.                                               kAutoGenerateReturnID,kAnyTransactionID,&ae);
  53.         FailOSErr_(err);
  54.         
  55.         err = ::AEPutParamPtr(&ae,keyDirectObject,typeFSS,&inFile,sizeof(inFile));
  56.         FailOSErr_(err);
  57.  
  58.         err  = ::AESend(&ae,&aeReply, kAENoReply | kAENeverInteract, kAENormalPriority,
  59.                     kAEDefaultTimeout,nil,nil);
  60.         FailOSErr_(err);
  61.     }
  62.     Catch_(catchErr) {err = catchErr;} EndCatch_
  63.     
  64.     if (processDesc.descriptorType != typeNull) ::AEDisposeDesc(&processDesc);
  65.     if (ae.descriptorType != typeNull) ::AEDisposeDesc(&ae);
  66.     if (aeReply.descriptorType != typeNull) ::AEDisposeDesc(&aeReply);
  67.     return err;
  68. }
  69.  
  70. StFolderIterator::StFolderIterator(short inVRefNum, long inFolderID)
  71.     : mVRefNum(inVRefNum), mFolderID(inFolderID), mIndex(0)
  72. {
  73.  
  74. }
  75.  
  76. Boolean    
  77. StFolderIterator::Next(HFileParam &ioRec)
  78. {
  79.     ioRec.ioVRefNum = mVRefNum;
  80.     ioRec.ioDirID = mFolderID;
  81.     if (ioRec.ioNamePtr) ioRec.ioNamePtr[0] = 0; // reset name field
  82.     ioRec.ioFDirIndex = ++mIndex;
  83.     ioRec.ioResult = noErr;
  84.     
  85.     PBHGetFInfo((HParmBlkPtr)&ioRec,false);
  86.     return  (ioRec.ioResult == noErr);
  87. }
  88.